package demo03.Generic;

import java.util.ArrayList;
import java.util.Iterator;

/*
    创建集合对象,使用泛型
    好处:
        1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
        2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)
     弊端:
        泛型是什么类型,只能存储什么类型的数据
 */
public class Demo01Generic {
    public static void main(String[] args) {
//        demo01();
        demo02();
    }

    private static void demo02() {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("I'm gonna to school");
        arrayList.add("Is really fun to me");
        Iterator it = arrayList.iterator();
        for(String s:arrayList){
            System.out.println(s);
        }
        System.out.println("===============");
        while (it.hasNext()) {
            System.out.println(it.next());
        }

    }

    /*
         创建集合对象,不使用泛型
         好处:
             集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据
         弊端:
             不安全,会引发异常
      */
    private static void demo01() {
        ArrayList arrayList = new ArrayList();
        arrayList.add("aaa");
        arrayList.add(2);
        //使用迭代器遍历list集合
        Iterator it = arrayList.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);
            //想要使用String类特有的方法,length获取字符串的长度;不能使用  多态 Object obj = "abc";
            //需要向下转型
//            obj.length;
//            Object object="abc";
//            System.out.println(object);
            System.out.println(((String) obj).length());//ClassCastException
//            Integer cannot be cast to java.base/java.lang.String

        }


    }
}
